﻿module TestDiccionario where

import Diccionario
import Test.HUnit

--Para hacer más sencillo
runTestsDiccionario = runTestTT allTestDiccionario

--TESTS
--Test claves
testClaves1 = TestCase (assertEqual "Para Diccionario 1 elemento," [10] (claves dicc1) )
testClaves2 = TestCase (assertEqual "Para Diccionario 2 elementos," [2,10] (claves dicc2) )
testClaves3 = TestCase (assertEqual "Para Diccionario 3 elementos," [2,5,10] (claves dicc3) )
testClaves4 = TestCase (assertEqual "Para Diccionario 4 elementos," [1,2,5,10] (claves dicc4) )
testClaves5 = TestCase (assertEqual "Para Diccionario 5 elementos," [1,2,5,6,10] (claves dicc5) )
testClaves6 = TestCase (assertEqual "Para Diccionario 6 elementos," [1,2,5,6,7,10] (claves dicc6) )
testClaves7 = TestCase (assertEqual "Para Diccionario 7 elementos," [1,2,3,5,6,7,10] (claves dicc7) )
testClaves8 = TestCase (assertEqual "Para Diccionario 8 elementos," [1,2,3,5,6,7,10,20] (claves dicc8) )
testClaves9 = TestCase (assertEqual "Para Diccionario 9 elementos," [1,2,3,5,6,7,10,18,20] (claves dicc9) )

--Test obtener
--Casos para ver obtener de un Diccionario con un único elemento
testObtener1 = TestCase (assertEqual "Para Diccionario 1 elemento (Existe)," (Just "a") (obtener 10 dicc1) )
testObtener2 = TestCase (assertEqual "Para Diccionario 1 elemento (No Existe)," Nothing (obtener 100 dicc1) )
--Casos para ver el obtener de todos los elementos de un diccionario con dos elementos
testObtener3 = TestCase (assertEqual "Para Diccionario 2 elementos (Existe)," (Just "a") (obtener 10 dicc2) )
testObtener4 = TestCase (assertEqual "Para Diccionario 2 elementos (Existe)," (Just "b") (obtener 2 dicc2) )
testObtener5 = TestCase (assertEqual "Para Diccionario 2 elementos (No Existe)," Nothing (obtener 100 dicc2) )
--Casos para ver el obtener de todos los elementos de un diccionario con tres elementos
testObtener6 = TestCase (assertEqual "Para Diccionario 3 elementos (Existe)," (Just "a") (obtener 10 dicc3) )
testObtener7 = TestCase (assertEqual "Para Diccionario 3 elementos (Existe)," (Just "b") (obtener 2 dicc3) )
testObtener8 = TestCase (assertEqual "Para Diccionario 3 elementos (Existe)," (Just "c") (obtener 5 dicc3) )
testObtener9 = TestCase (assertEqual "Para Diccionario 3 elementos (No Existe)," Nothing (obtener 100 dicc3) )
--Casos para ver el obtener de todos los elementos de un diccionario con cuatro elementos
testObtener10 = TestCase (assertEqual "Para Diccionario 4 elementos (Existe)," (Just "a") (obtener 10 dicc4) )
testObtener11 = TestCase (assertEqual "Para Diccionario 4 elementos (Existe)," (Just "b") (obtener 2 dicc4) )
testObtener12 = TestCase (assertEqual "Para Diccionario 4 elementos (Existe)," (Just "c") (obtener 5 dicc4) )
testObtener13 = TestCase (assertEqual "Para Diccionario 4 elementos (Existe)," (Just "d") (obtener 1 dicc4) )
testObtener14 = TestCase (assertEqual "Para Diccionario 4 elementos (No Existe)," Nothing (obtener 100 dicc4) )
--Casos para ver el obtener de todos los elementos de un diccionario con cinco elementos
testObtener15 = TestCase (assertEqual "Para Diccionario 5 elementos (Existe)," (Just "a") (obtener 10 dicc5) )
testObtener16 = TestCase (assertEqual "Para Diccionario 5 elementos (Existe)," (Just "b") (obtener 2 dicc5) )
testObtener17 = TestCase (assertEqual "Para Diccionario 5 elementos (Existe)," (Just "c") (obtener 5 dicc5) )
testObtener18 = TestCase (assertEqual "Para Diccionario 5 elementos (Existe)," (Just "d") (obtener 1 dicc5) )
testObtener19 = TestCase (assertEqual "Para Diccionario 5 elementos (Existe)," (Just "e") (obtener 6 dicc5) )
testObtener20 = TestCase (assertEqual "Para Diccionario 5 elementos (No Existe)," Nothing (obtener 100 dicc5) )
--Casos para ver el obtener de todos los elementos de un diccionario con seis elementos
testObtener21 = TestCase (assertEqual "Para Diccionario 6 elementos (Existe)," (Just "a") (obtener 10 dicc6) )
testObtener22 = TestCase (assertEqual "Para Diccionario 6 elementos (Existe)," (Just "b") (obtener 2 dicc6) )
testObtener23 = TestCase (assertEqual "Para Diccionario 6 elementos (Existe)," (Just "c") (obtener 5 dicc6) )
testObtener24 = TestCase (assertEqual "Para Diccionario 6 elementos (Existe)," (Just "d") (obtener 1 dicc6) )
testObtener25 = TestCase (assertEqual "Para Diccionario 6 elementos (Existe)," (Just "e") (obtener 6 dicc6) )
testObtener26 = TestCase (assertEqual "Para Diccionario 6 elementos (Existe)," (Just "f") (obtener 7 dicc6) )
testObtener27 = TestCase (assertEqual "Para Diccionario 6 elementos (No Existe)," Nothing (obtener 100 dicc6) )
--Casos para ver el obtener de todos los elementos de un diccionario con siete elementos
testObtener28 = TestCase (assertEqual "Para Diccionario 7 elementos (Existe)," (Just "a") (obtener 10 dicc7) )
testObtener29 = TestCase (assertEqual "Para Diccionario 7 elementos (Existe)," (Just "b") (obtener 2 dicc7) )
testObtener30 = TestCase (assertEqual "Para Diccionario 7 elementos (Existe)," (Just "c") (obtener 5 dicc7) )
testObtener31 = TestCase (assertEqual "Para Diccionario 7 elementos (Existe)," (Just "d") (obtener 1 dicc7) )
testObtener32 = TestCase (assertEqual "Para Diccionario 7 elementos (Existe)," (Just "e") (obtener 6 dicc7) )
testObtener33 = TestCase (assertEqual "Para Diccionario 7 elementos (Existe)," (Just "f") (obtener 7 dicc7) )
testObtener34 = TestCase (assertEqual "Para Diccionario 7 elementos (Existe)," (Just "g") (obtener 3 dicc7) )
testObtener35 = TestCase (assertEqual "Para Diccionario 7 elementos (No Existe)," Nothing (obtener 100 dicc7) )
--Casos para ver el obtener de todos los elementos de un diccionario con ocho elementos
testObtener36 = TestCase (assertEqual "Para Diccionario 8 elementos (Existe)," (Just "a") (obtener 10 dicc8) )
testObtener37 = TestCase (assertEqual "Para Diccionario 8 elementos (Existe)," (Just "b") (obtener 2 dicc8) )
testObtener38 = TestCase (assertEqual "Para Diccionario 8 elementos (Existe)," (Just "c") (obtener 5 dicc8) )
testObtener39 = TestCase (assertEqual "Para Diccionario 8 elementos (Existe)," (Just "d") (obtener 1 dicc8) )
testObtener40 = TestCase (assertEqual "Para Diccionario 8 elementos (Existe)," (Just "e") (obtener 6 dicc8) )
testObtener41 = TestCase (assertEqual "Para Diccionario 8 elementos (Existe)," (Just "f") (obtener 7 dicc8) )
testObtener42 = TestCase (assertEqual "Para Diccionario 8 elementos (Existe)," (Just "g") (obtener 3 dicc8) )
testObtener43 = TestCase (assertEqual "Para Diccionario 8 elementos (Existe)," (Just "h") (obtener 20 dicc8) )
testObtener44 = TestCase (assertEqual "Para Diccionario 8 elementos (No Existe)," Nothing (obtener 100 dicc8) )
--Casos para ver el obtener de todos los elementos de un diccionario con nueve elementos
testObtener45 = TestCase (assertEqual "Para Diccionario 9 elementos (Existe)," (Just "a") (obtener 10 dicc9) )
testObtener46 = TestCase (assertEqual "Para Diccionario 9 elementos (Existe)," (Just "b") (obtener 2 dicc9) )
testObtener47 = TestCase (assertEqual "Para Diccionario 9 elementos (Existe)," (Just "c") (obtener 5 dicc9) )
testObtener48 = TestCase (assertEqual "Para Diccionario 9 elementos (Existe)," (Just "d") (obtener 1 dicc9) )
testObtener49 = TestCase (assertEqual "Para Diccionario 9 elementos (Existe)," (Just "e") (obtener 6 dicc9) )
testObtener50 = TestCase (assertEqual "Para Diccionario 9 elementos (Existe)," (Just "f") (obtener 7 dicc9) )
testObtener51 = TestCase (assertEqual "Para Diccionario 9 elementos (Existe)," (Just "g") (obtener 3 dicc9) )
testObtener52 = TestCase (assertEqual "Para Diccionario 9 elementos (Existe)," (Just "h") (obtener 20 dicc9) )
testObtener53 = TestCase (assertEqual "Para Diccionario 9 elementos (Existe)," (Just "i") (obtener 18 dicc9) )
testObtener54 = TestCase (assertEqual "Para Diccionario 9 elementos (No Existe)," Nothing (obtener 100 dicc9) )


	
--DECLARACION DE SUITs
--Hacemos una suit con los casos de test de claves
testClaves = TestList [
	TestLabel "TestClaves1" testClaves1,
	TestLabel "TestClaves2" testClaves2,
	TestLabel "TestClaves3" testClaves3,
	TestLabel "TestClaves4" testClaves4,
	TestLabel "TestClaves5" testClaves5,
	TestLabel "TestClaves6" testClaves6,
	TestLabel "TestClaves7" testClaves7,
	TestLabel "TestClaves8" testClaves8,
	TestLabel "TestClaves8" testClaves9]

--Hacemos una suit con los casos de test de obtener
testObtener = TestList [
	TestLabel "TestObtener1" testObtener1,
	TestLabel "TestObtener2" testObtener2,
	TestLabel "TestObtener3" testObtener3,
	TestLabel "TestObtener4" testObtener4,
	TestLabel "TestObtener5" testObtener5,
	TestLabel "TestObtener6" testObtener6,
	TestLabel "TestObtener7" testObtener7,
	TestLabel "TestObtener8" testObtener8,
	TestLabel "TestObtener9" testObtener9,
	TestLabel "TestObtener10" testObtener10,
	TestLabel "TestObtener11" testObtener11,
	TestLabel "TestObtener12" testObtener12,
	TestLabel "TestObtener13" testObtener13,
	TestLabel "TestObtener14" testObtener14,
	TestLabel "TestObtener15" testObtener15,
	TestLabel "TestObtener16" testObtener16,
	TestLabel "TestObtener17" testObtener17,
	TestLabel "TestObtener18" testObtener18,
	TestLabel "TestObtener19" testObtener19,
	TestLabel "TestObtener20" testObtener20,
	TestLabel "TestObtener21" testObtener21,
	TestLabel "TestObtener22" testObtener22,
	TestLabel "TestObtener23" testObtener23,
	TestLabel "TestObtener24" testObtener24,
	TestLabel "TestObtener25" testObtener25,
	TestLabel "TestObtener26" testObtener26,
	TestLabel "TestObtener27" testObtener27,
	TestLabel "TestObtener28" testObtener28,
	TestLabel "TestObtener29" testObtener29,
	TestLabel "TestObtener30" testObtener30,
	TestLabel "TestObtener31" testObtener31,
	TestLabel "TestObtener32" testObtener32,
	TestLabel "TestObtener33" testObtener33,
	TestLabel "TestObtener34" testObtener34,
	TestLabel "TestObtener35" testObtener35,
	TestLabel "TestObtener36" testObtener36,
	TestLabel "TestObtener37" testObtener37,
	TestLabel "TestObtener38" testObtener38,
	TestLabel "TestObtener39" testObtener39,
	TestLabel "TestObtener40" testObtener40,
	TestLabel "TestObtener41" testObtener41,
	TestLabel "TestObtener42" testObtener42,
	TestLabel "TestObtener43" testObtener43,
	TestLabel "TestObtener44" testObtener44,
	TestLabel "TestObtener45" testObtener45,
	TestLabel "TestObtener46" testObtener46,
	TestLabel "TestObtener47" testObtener47,
	TestLabel "TestObtener48" testObtener48,
	TestLabel "TestObtener49" testObtener49,
	TestLabel "TestObtener50" testObtener50,
	TestLabel "TestObtener51" testObtener51,
	TestLabel "TestObtener52" testObtener52,
	TestLabel "TestObtener53" testObtener53,
	TestLabel "TestObtener54" testObtener54]
	
--Armamos una "suit" con los test de Diccionario
allTestDiccionario = TestList [
	TestLabel "TestClaves" testClaves,
	TestLabel "TestObtener" testObtener]
	
--Diccionarios
dicc1 :: Diccionario Int String
dicc1 = definir 10 "a" (vacío (<))

dicc2 :: Diccionario Int String
dicc2 = definir 2 "b" dicc1

dicc3 :: Diccionario Int String
dicc3 = definir 5 "c" dicc2

dicc4 :: Diccionario Int String
dicc4 = definir 1 "d" dicc3

dicc5 :: Diccionario Int String
dicc5 = definir 6 "e" dicc4

dicc6 :: Diccionario Int String
dicc6 = definir 7 "f" dicc5

dicc7 :: Diccionario Int String
dicc7 = definir 3 "g" dicc6

dicc8 :: Diccionario Int String
dicc8 = definir 20 "h" dicc7

dicc9 :: Diccionario Int String
dicc9 = definir 18 "i" dicc8


